home *** CD-ROM | disk | FTP | other *** search
/ F1 Licenseware / F1 Licenseware - Volume 1.iso / disks / 050a.dms / 050a.adf / TEXTS / chapter10.txt < prev    next >
Text File  |  1992-02-26  |  19KB  |  471 lines

  1.                     The Absolute Beginners Guide To Amos
  2.                     -------------------------------------
  3.                                  Chapter Ten
  4.                                  -----------
  5.  
  6. We are now going to take a good look at Bobs.
  7.  
  8. Bob is short for Blitter Object, don`t confuse Bobs with sprites, my advice, 
  9. at this stage at least, is to forget about Sprites. They are a bit harder to
  10. use, but they will have their uses as you may find in the future.
  11.  
  12. A Bob is a moveable object. It could be an Alien in Space Invaders game or 
  13. the Pacman character from the game of the same name. A bob can be anything
  14. you want it to be.
  15.  
  16. To start with we will have to either create our own bobs in an art package
  17. like Dpaint or use some existing ones already on disk.  Luckily on this very 
  18. disk in the BOBS drawer we have a bob file called SPACECRAFT.ABK. The ABK by
  19. the way stands for Amos BanK.
  20.  
  21. If you want to create your own bobs, then as I mentioned you will have to 
  22. draw them in an art program, save out the IFF picture, load the IFF picture 
  23. into the Amos Sprite Grabber program, cut them out and save them as
  24. an ABK file.  You can then load the ABK file into bank 1 of your program.  
  25. It`s not as complicated as I have just made it sound really.
  26.  
  27. Our first mission then is to load our bobs into a memory bank.  Bank one is
  28. especially reserved as a sprite or bob bank.  By the way you can load other 
  29. files into bank 1 if you do not need bobs or sprites in your program.
  30.  
  31. LOAD "DF0:BOBS/SPACECRAFT.ABK"
  32. --------------------------
  33. This will load the ABK file into bank one.  How does Amos know which bank to
  34. load it in, You may ask?  Amos examines the file and sees it is a sprite or 
  35. bob bank file and so loads it into the default bank which as I mentioned 
  36. earlier is bank one. You can of course put 
  37.  
  38. LOAD "DF0:BOBS/SPACECRAFT.ABK",1
  39.  
  40. If that is your preference.
  41.  
  42. So, we have our bobs loaded into bank one, the next step is to ready the 
  43. screen for printing our bob onto:
  44.  
  45. FLASH OFF: CURS OFF: HIDE: PAPER 0: CLS 0
  46. -----------------------------------------
  47. If we didn`t turn FLASH OFF (remember colour number three?) Then any part of
  48. our bob that appeared in colour three may flash, we do not need the text 
  49. cursor or the mouse for this particular program so we disable these, set the
  50. paper colour to 0 (usually black, depending on the palette) and CLear the 
  51. Screen to colour zero (black) as well. You don't have to do any of the above
  52. but it makes sense to turn the FLASHing off. It looks neater with no cursor
  53. winking away in the top left hand edge of the screen and the mouse would just
  54. be in the way, doing nothing. You can of course CLear the Screen in any
  55. colour you wish.
  56.  
  57.  
  58. GET SPRITE PALETTE
  59. -------------------
  60. NOTE: In Amos pro you can use GET BOB PALETTE but in the original Amos
  61.       it is still called SPRITE, don`t let this confuse you, as they are the
  62.       same.
  63.  
  64. This takes the colours used by the bobs in bank one and replaces Amos`s
  65. default screen colours. The simplest way to understand this is to put a REM 
  66. or a ` in front of the GET SPRITE PALETTE command, this will stop Amos 
  67. executing that line and you will see the effect. A load of garbled colours.
  68. This is because Amos is displaying the bob in the default colours and not the
  69. colours that the bobs were originally drawn in.  Remember this technique of 
  70. putting REMs or ` in front of lines, it`s a useful way of debugging programs 
  71. without actually deleting lines. Useful things those REMs.
  72.  
  73.  
  74. BOB 1,10,100,1
  75. --------------
  76. Blimey! that looks complicated, yes, it looks it but it`s fairly straight
  77. forward really. Please make a note of the following because I doubt very
  78. much if you will remember this first time.  I will now break down each part
  79. of the line:
  80.  
  81. BOB 1  
  82. This tells Amos that we wish to use a bob, the 1 is really for our
  83. reference because we can have up to 64 bobs on screen at once and we have to
  84. have a number to refer to each one individually.
  85. It is possible to have more than 64 bobs on screen with some twiddling but a
  86. maximum of 64 is enough for now don`t you think?.
  87.  
  88. 10,100 
  89. Remember the LOCATE instruction? This is virtually the same except
  90. now we are using pixels instead of bytes as coordinates, there are eight
  91. pixels to a byte so the range is eight times the width and length of text
  92. coordinates. Don`t harp about it at this stage, it`s not that vital to 
  93. understand as with a bit of experimenting you will soon get used to the idea.
  94. So the above line means place the bob at 10 pixels across the screen and 100
  95. pixels down the screen. To recap so far we have,
  96.  
  97. BOB 1, Tell Amos what bob number we are calling this
  98. BOB 1,10,100 Place our bob 1 at 10 across and 100 down on the current screen.
  99.  
  100. The last number ,1, is the actual bob image from the bob bank that we want 
  101. displayed on the screen.  Experiment by changing the last number to see what
  102. different bobs we have stored in the bank.  A better way of viewing bobs is
  103. to load the Sprite_editor from your Amos disk and press L to load a bob bank
  104. and view/edit them from there.
  105.  
  106. CLEAR KEY: WAIT KEY
  107. ------------------  
  108. CLEAR the KEYboard buffer and wait for a key press.
  109.  
  110. LISTBANK
  111. --------
  112. Just there to show you what is in the bank.
  113.  
  114.  
  115. That wasn`t so bad after all. The only confusion may arise from the actual
  116. BOB command itself so I will give you a few examples to make things a little
  117. clearer:
  118.  
  119. BOB 1,0,0,1        Place BOB at 0 across 0 down image 1 (top left of screen)
  120.  
  121. BOB 2,10,10,1      Place another copy of image 1 at 10,10
  122.  
  123. BOB 1,10,100,1     Place our bob 1 (the one at top left of screen) at 10,100
  124.                    Amos will automatically erase the old bob 1 at 0,0 for you
  125.  
  126. BOB 2,200,100,2    Place bob 2 (which was at 10,10) to 200,100 but also
  127.                    change its image to the bob in slot 2 of the bank.
  128.                    Amos erases the bob at 10,10.
  129.  
  130.  
  131. I hope that answers a few questions for you.  Here is the complete listing.
  132.  
  133.  
  134. REM EXAMPLE10.Amos
  135. FLASH OFF: CURS OFF: PAPER 0: HIDE: CLS 0
  136. LOAD "DF0:BOBS/SPACECRAFT.ABK"
  137. GET SPRITE PALETTE
  138. BOB 1,10,100,1
  139. CLEAR KEY: WAIT KEY
  140. LISTBANK  
  141.  
  142.  
  143. Please spend a while playing around with EXAMPLE10.Amos as you will learn an
  144. awful lot about bobs, and keep taking down those valuable notes.
  145.  
  146.  
  147. Now placing a bob on screen is fine first time but hardly earth shattering
  148. is it? So to pep things up how about animating the spacecraft a little?
  149. Hmm spacecraft don`t move about a lot in flight except in one direction I
  150. suppose? That blue flame from the engine could be made to look better if
  151. it was animated, let`s do that then. As it happens, in the bob bank, images
  152. one to four are exact copies of the ship with the blue flame just slightly
  153. altered. Now if we were to place image two on top of image one quickly
  154. then image three over image two etc. It would appear the flame was moving.
  155. Remember those flicker books years ago? Something like that.  
  156. You will probably suspect this is going to entail a major coding 
  157. session and if we were using almost any other language it would, but with 
  158. good old Amos things are a lot easier.  We will take the listing from 
  159. EXAMPLE10.Amos and add just three lines to achieve our objective, this is the
  160. program in full.
  161.  
  162.  
  163. REM EXAMPLE10_1.Amos
  164. FLASH OFF: CURS OFF: PAPER0: HIDE: CLS 0
  165. LOAD "DF0:BOBS/SPACECRAFT.ABK"
  166. GET SPRITE PALETTE
  167. CHANNEL 1 to BOB 1
  168. BOB 1,10,100,1
  169. ANIM 1,"(1,5)(2,5)(3,5)(4,5)L"
  170. ANIM ON
  171. CLEAR KEY: WAIT KEY
  172. LISTBANK  
  173.  
  174.  
  175. Here follows a breakdown of the three new lines,
  176.  
  177. CHANNEL 1 TO BOB 1
  178. ------------------
  179. This weird looking monster is necessary to tell Amos we are about to do some
  180. ANIMating, you don`t need to understand how it works at the moment but you
  181. need to understand that it is needed to use ANIMations, as this is the first
  182. time in this program that we are to use a CHANNEL we may as well use CHANNEL
  183. 1, and the starting bob we are about to use is bob 1 so we use CHANNEL 1 to
  184. BOB 1.  This command tells Amos to set up an interrupt channel. As you have
  185. probably never heard of interrupts, I will explain briefly.  An Interrupt is
  186. like having two programs running at once, your normal Amos program and let us
  187. say an ANIMation, we set the ANIMation to be interrupt driven (that is what 
  188. CHANNEL does) and this means every 50th of a second Amos will execute the 
  189. ANIMation as well as executing your Amos program.  The beauty of interrupts 
  190. are once you have set them up you can forget all about them and they will 
  191. keep on running unless you tell them to stop.  To prove this, RUN 
  192. EXAMPLE10_1.Amos and press a key to stop the program running, now press 
  193. escape and you will see the ANIMation still running under interrupt in the 
  194. background. When you stop the program with your key press you were actually
  195. stopping one of two programs being run by Amos the one still running, the
  196. ANIMation has not been told to stop, so obviously it just keeps on running
  197. in the background until told to do otherwise. See later on how to stop this 
  198. poor blighter. 
  199.  
  200.  
  201. ANIM 1,"(1,5)(2,5)(3.5)(4,5)L"
  202. ------------------------------
  203. The ANIMation line itself looks very complicated at first so as usual I will
  204. break it down for you:
  205.  
  206. ANIM 1
  207. Tell Amos there is going to be an ANIMation string. As it`s our first ANIM
  208. string we will name it 1.
  209.  
  210. (1,5)
  211. Display bob image number 1 and hold it on screen for 5/50ths of a second.
  212.  
  213. (2,5)
  214. Display bob 2 and hold for 5/50ths
  215.  
  216. (3,5)
  217. bob 3, 5/50ths
  218.  
  219. (4,5)
  220. And lastly display bob 4 for 5/50ths of a second
  221.  
  222. L
  223. The L is short for Loop and this means once Amos has finished displaying 
  224. image 4 for 5/50ths of a second it will start all over again from image 1.
  225.  
  226. Don`t forget you must have all the quotes, commas and brackets exactly as in
  227. the example or you will probably get an error.
  228.  
  229.  
  230. ANIM ON
  231. -------
  232. Nothing will actually happen visually until this instruction has been 
  233. executed it simply sets the ANIMation on it`s way. If we have more than one
  234. ANIMation in the same program ANIM ON would set ALL the ANIMations in
  235. motion. So if you didn`t want that you would call each ANIMation string by 
  236. it`s number i.e. ANIM ON 1. To turn off an ANIMation we use ANIM OFF or 
  237. ANIM OFF N.  (N being your Anim number)
  238.  
  239. Now I will show you the easiest way to make an ANIMated bob MOVE about the
  240. screen.  The following program will use a space picture as a background 
  241. screen, place a bob just outside the edge of the screen and then MOVE the bob
  242. across the screen. The bob will then stop and be blown up with an ANIMated 
  243. explosion and sound effect. The listing is identical in places to 
  244. EXAMPLE10_1.Amos.
  245.  
  246. REM A small space animation
  247.  
  248. FLASH OFF: CURS OFF: PAPER 0: HIDE: CLS 0
  249. LOAD "DF0:BOB/SPACECRAFT.ABK"
  250. LOAD IFF "DF0:PICS/SPACE.IFF",0
  251. CHANNEL 1 TO BOB 1
  252. CHANNEL 2 TO BOB 1
  253. DOUBLE BUFFER
  254. BOB 1,-48,20,1
  255. ANIM 1,"(1,5)(2,5)(3,5)(4,5)L"
  256. ANIM 2,"(17,5)(18,5)(19,5)(20,5)(21,5)(22,5)(23,5)(24,5)(25,5)"
  257. ANIM ON 1
  258. MOVE X 1,"(1,1,370)"
  259. MOVE ON
  260. WAIT 300
  261. MOVE OFF
  262. ANIM OFF 1
  263. ANIM ON 2
  264. BOOM
  265. WAIT 25
  266. ANIM OFF:BOB OFF
  267. CLEAR KEY: WAIT KEY
  268.  
  269. Looks a right old mess doesn`t it? It is not as complicated as it looks, 
  270. trust me.  I am going to do the breakdown as usual so here we go.
  271.  
  272. FLASH OFF: CURS OFF: PAPER 0: HIDE: CLS 0
  273. -----------------------------------------
  274. I shouldn`t need to explain this.
  275.  
  276. LOAD "DF0:BOBS/SPACECRAFT.ABK"
  277. --------------------------
  278. Load the bobs.
  279.  
  280. LOAD IFF "DF0:PICS/SPACE.IFF",0
  281. --------------------------
  282. Load an IFF picture into the current screen, this will be our background
  283. picture.  Apologies for my artwork, I am not an artist.  We covered loading
  284. pictures in a previous chapter so look it up or check your notes if need be.
  285.  
  286. CHANNEL 1 TO BOB 1
  287. ------------------
  288. I fully explained this line in the last listing.
  289.  
  290. CHANNEL 2 TO BOB 1
  291. ------------------
  292. We are assigning another interrupt channel for the explosion, as the 
  293. explosion will overwrite bob 1 we will also use Bob 1 for the explosion, 
  294. remember not to get the bob number and image number confused.
  295.  
  296. DOUBLE BUFFER
  297. -------------
  298. To be honest I didn`t actually need to use this command because we are only
  299. using one bob at a time, but DOUBLE BUFFER, in a nutshell, stops your bobs
  300. from flickering.  I won`t go into the technical side of how it works as that
  301. is irrelevant for now and will probably lead to confusion. You should be
  302. aware though that DOUBLE BUFFER uses up around 32K of extra memory,
  303. dependent on the size and amount of colours of the screen you are using. 
  304. All you really need to know at this stage is, if your bobs are  flickering
  305. then use DOUBLE BUFFER.
  306.  
  307. BOB 1,-48,20,1
  308. --------------
  309. Places bob 1 (The ship) at coordinates -48 pixels across and 20 pixels down
  310. the screen.  I shall explain the minus coordinate, -48 is 48 pixels off of 
  311. the screen edge so we are placing the ship 48 pixels before the left edge of
  312. the screen which means it is not visible.  I did this so when we start moving
  313. the ship it will appear smoothly from off the screen, a much better effect 
  314. than the ship just appearing from nowhere.
  315.  
  316. ANIM 1,"(1,5)(2,5)(3,5)(4,5)L"
  317. -------------------------------
  318. We covered this exact line in the above example.
  319.  
  320. ANIM 2,"(17,5)(18,5)(19,5)(20,5)(21,5)(22,5)(23,5)(24,5)(25,5)"
  321. --------------------------------------------------------------
  322. This is the explosion animation string.  It works the same as the ANIM 1
  323. line except it uses more and different images.  The explosion animation
  324. starts with image 17 and ends at image 25 the delay between each frame is
  325. 5/50ths of a second.  You could change the delay to a higher number for a
  326. faster animation or a lower number for a slower animation.
  327.  
  328. ANIM ON 1
  329. ---------
  330. This sets the ships engine flame animation into motion.  This time we have
  331. had to tell Amos what ANIM to use (1) because there is more than one ANIM
  332. string set up.  See the ANIM ON line in the last example.
  333.  
  334. MOVE X 1,"(1,1,370)"
  335. --------------------
  336. This is the instruction that brings the whole scene to life.
  337. I will break this one down further so we can dissect it thoroughly.
  338.  
  339. MOVE X 1,
  340. --------- 
  341. This part tells Amos we wish to move a bob horizontally, the 1 is the 
  342. bob number we wish to use.
  343.  
  344. "(1,1,370)"
  345. ----------
  346. This is the mechanics of the MOVE instruction, the first number (1) is the 
  347. speed of the movement in 50ths of a second, 1 is the fastest possible.  
  348. The second (1) is the step count which I have set at one pixel for smooth 
  349. movement and the 370 is the amount of pixels we want the ship to move across
  350. the screen and that is it really.  Please take notes on this as to look at it
  351. without knowing what the numbers represent can lead to confusion.  
  352. Remember (Speed,pixels,distance) or as the manual puts it (Speed,Step,Count)
  353. whatever suits you.
  354.                           
  355. Note: Although I have set the speed of the ships movement to maximum it 
  356. moves across the screen quite slow, this is because I set the step rate at
  357. one pixel for smoothness.  If you want an idea of how fast Amos bobs can be
  358. change the step rate to 4 8 or 16 etc. And you will be amazed.
  359.  
  360. MOVE ON
  361. -------
  362. The previous move instruction just sets up the information for Amos, this is
  363. the instruction that sets it all in motion.  The ship will not MOVE until 
  364. Amos gets to this line (Remember the same thing with ANIM?) Our spacecraft
  365. will now start to move across the screen.
  366.  
  367.  
  368. WAIT 300
  369. --------
  370. We know what this does, it tells Amos to wait here and do nothing (apart
  371. from interrupts of course) For six seconds.  The reason I have put this WAIT
  372. here is that the next instructions are for the explosion and I want the 
  373. explosion to occur at the other side of the screen, if we didn`t put this
  374. line in the ship would explode almost immediately, try it and see.
  375.  
  376. MOVE OFF
  377. --------
  378. We are now preparing for the explosion. The first thing we want to do is stop
  379. the ship in it`s tracks. This we achieve with MOVE OFF which turns off all
  380. previously set up MOVE strings.  If we had more than one MOVE command in the
  381. program we would use MOVE OFF N if we only wanted one of the MOVE strings to
  382. be halted.
  383.  
  384. ANIM OFF 1
  385. ----------
  386. Turn off the engine flame animation.
  387.  
  388. ANIM ON 2
  389. ---------
  390. Start the explosion, ANIM 2.
  391.  
  392. BOOM
  393. ----
  394. While the explosion is in progress play the BOOM sound effect.
  395.  
  396. WAIT 25
  397. -------
  398. WAIT for the explosion to finish.
  399.  
  400. ANIM OFF: BOB OFF
  401. ----------------
  402. Switch all ANIMations OFF and clear the bob from the screen.
  403.  
  404. CLEAR KEY: WAIT KEY
  405. -------------------
  406. Look it up.
  407.  
  408.  
  409. NOTE: This is the simplest way I could find of doing this short Animation
  410.       but there are much better (more complicated) ways.
  411. -------------------------------------------------------------------------
  412.  
  413. I am afraid that is just the tip of the iceberg as far as bobs, movement
  414. and animation are concerned. It isn`t this tutorials intention to cover
  415. everything but I hope to get you off to a good start and understand the
  416. basics of it.  Here are a few more commands that you will need to know about 
  417. if you delve further into bobs.
  418.  
  419.  
  420. MOVE y
  421. --------
  422. This works identically to MOVE X, the difference of course is MOVE Y moves
  423. the bob vertically along the screen. A minus value would move up the screen
  424. and a positive value down the screen.
  425.  
  426.  
  427. WAIT VBL
  428. --------
  429. This causes Amos to WAIT for a Vertical BLank.  It basically WAITs for Amos
  430. to update the screen which normally happens every 50th of a second, 
  431. if you have a problem with a bob not appearing try a WAIT VBL instruction 
  432. before or after the BOB command.
  433.  
  434.  
  435. MOVE FREEZE N
  436. -------------
  437. Temporarily stop bobs in their tracks, use MOVE ON N to restart.  
  438. N is optional.
  439.  
  440.  
  441. ANIM FREEZE N
  442. -------------
  443. As above but affects ANIM.
  444.  
  445.  
  446. ABOUT AMAL
  447. ----------
  448. You may or may not of heard of AMAL, which is a sub-language used in Amos.
  449. We have been using Amal commands for the BOB, MOVE and ANIM commands.
  450. AMAL stands for Animation language and as I said before is interrupt driven.
  451. To cover Amal properly would require another book and I have my reservations
  452. about using Amal, as a lot of other coders do. It is pretty tricky to get to
  453. grips with in places. At first Amal appears to give a huge increase in speed
  454. but once you compile your program that extra speed is lost. So take my
  455. advice and only use Amal when necessary.
  456.  
  457. Well that`s quite a lot to take in, make those notes and mess with 
  458. EXAMPLE10.Amos, EXAMPLE10_1.AMOS and EXAMPLE10_2.Amos
  459. and have some fun trying to make your own animations.
  460.  
  461.  
  462. NOTE: The bob file SPACECRAFT.ABK was borrowed from the Amos Extras disk and
  463.       is located in the AMOS SPRITE_600 folder on that disk along with lots
  464.       of other useful bobs.
  465.       The Tracker mod is P.D (author unknown).  
  466.       The background picture I managed myself, sorry.
  467.  
  468.  
  469.                              End of chapter ten
  470.                              ^^^^^^^^^^^^^^^^^^
  471.